/* 
 * File:   RandomBoost.h
 * Author: jcrada
 *
 * Created on August 27, 2008, 3:42 PM
 */


#ifndef _RANDOMBOOST_H
#define	_RANDOMBOOST_H
#include <boost/random/uniform_int.hpp>
#include <boost/random/uniform_real.hpp>
#include <boost/random.hpp>
#include "defs.h"

namespace jcrada {
    typedef boost::mt19937 RandomNumberGenerator;
    typedef boost::variate_generator<RandomNumberGenerator&, boost::uniform_real<> > GeneratorReal;
    typedef boost::variate_generator<RandomNumberGenerator&, boost::uniform_int<> > GeneratorInt;

    class RandomBoost {
    private:
        DISALLOW_COPY_AND_ASSIGN(RandomBoost);
        RandomNumberGenerator * rng;
    public:
        RandomBoost();
        RandomBoost(unsigned int seed);
        virtual ~RandomBoost();
        virtual bool nextBool();
        virtual double nextDouble(double min, double max);
        virtual double nextDouble();
        virtual float nextFloat(float min, float max);
        virtual float nextFloat();
        virtual int nextInt(int min, int max);
        virtual int nextInt();
        virtual long nextLong(long min, long max);
        virtual long nextLong();
        virtual void setSeed(long seed);
    };
}
#endif	/* _RANDOMBOOST_H */